/**
 * src/types/index.ts
 * ------------------------------------
 * 全局类型定义
 * 1. 用户相关：User、UserRole、ChefStatus 等
 * 2. 菜品相关：Dish、Category、DishRating 等
 * 3. 订单相关：Order、OrderItem、OrderStatus 等
 * 4. 购物车：CartItem
 * 5. 应用状态：AppState、AppAction
 * 6. 积分系统：PointsTransaction、MemberLevel 等
 * 7. 身份系统：identityType、identitySubType 等
 * 所有业务逻辑的类型定义都集中在此文件
 * 创建日期：2025-08-06
 */

/**
 * 用户角色类型
 * chef: 厨师角色，可以管理菜品和订单
 * guest: 客人角色，可以浏览菜单和下单
 */
export type UserRole = 'chef' | 'guest';

/**
 * 厨师状态类型
 * available: 可接单状态
 * busy: 忙碌状态，正在处理订单
 * offline: 离线状态，不接单
 */
export type ChefStatus = 'available' | 'busy' | 'offline';

/**
 * 订单状态类型
 * pending: 待确认
 * confirmed: 已确认，正在制作
 * completed: 已完成
 * cancelled: 已取消
 */
export type OrderStatus = 'pending' | 'confirmed' | 'completed' | 'cancelled';

/**
 * 反馈类型
 * suggestion: 建议
 * bug: 问题反馈
 * complaint: 投诉
 * praise: 表扬
 */
export type FeedbackType = 'suggestion' | 'bug' | 'complaint' | 'praise';

/**
 * 反馈处理状态
 * pending: 待处理
 * processing: 处理中
 * resolved: 已解决
 * rejected: 已拒绝
 */
export type FeedbackStatus = 'pending' | 'processing' | 'resolved' | 'rejected';

/**
 * 菜品评价接口
 * 记录用户对菜品的评分和评论
 */
export interface DishRating {
  id: string;
  dishId: string;
  userId: string;
  userName: string;
  rating: number; // 1-5星评分
  comment?: string; // 评价内容
  images?: string[]; // 评价图片
  createdAt: Date;
}

/**
 * 用户反馈接口
 * 记录用户提交的各种反馈信息
 */
export interface Feedback {
  id: string;
  userId: string;
  userName: string;
  type: FeedbackType;
  title: string;
  content: string;
  images?: string[];
  status: FeedbackStatus;
  response?: string; // 管理员回复
  createdAt: Date;
  updatedAt: Date;
}

/**
 * 菜品数据结构
 * 定义菜品的完整信息
 */
export interface Dish {
  id: string;
  name: string;
  description: string;
  price: number;
  category: string;
  image: string;
  available: boolean;
  createdBy: string;
  createdAt: Date;
  updatedAt: Date;
  averageRating?: number; // 平均评分
  ratingCount?: number; // 评价数量
}

/**
 * 用户数据结构
 * 定义用户的完整信息，包括身份、积分、会员等级等
 */
export interface User {
  id: string;
  name: string;
  role: UserRole;
  points: number;
  avatar?: string;
  openid?: string; // 微信用户唯一标识
  createdAt: Date;
  status?: ChefStatus; // 厨师状态
  lastActiveAt?: Date; // 最后活跃时间
  memberLevel?: MemberLevel; // 会员等级
  totalHistoricalPoints?: number; // 历史累计积分（包括已使用和已过期）
  birthday?: Date; // 生日信息，用于生日特权
  firstOrderDate?: Date; // 首单日期
  consecutiveOrderDays?: number; // 连续下单天数
  lastOrderDate?: Date; // 最后下单日期
  
  // 身份相关字段
  identityType?: string; // 身份类型：family | friend
  identitySubType?: string; // 身份子类型：mom, dad, best_friend 等
  identityName?: string; // 身份显示名称
  intimacy?: number; // 亲密度 (0-100)
  intimacyLevel?: number; // 亲密度等级
  lastInteractionDate?: Date; // 最后互动时间
  unlockedSpecials?: string[]; // 已解锁的特殊内容ID
}

// 订单项
export interface OrderItem {
  dishId: string;
  dishName: string;
  quantity: number;
  price: number;
  totalPrice: number;
}

// 订单数据结构
export interface Order {
  id: string;
  userId: string;
  userName: string;
  items: OrderItem[];
  totalAmount: number;
  pointsUsed: number;
  finalAmount: number;
  status: OrderStatus;
  createdAt: Date;
  updatedAt: Date;
  note?: string;
  assignedChefId?: string; // 分配的厨师ID
  assignedChefName?: string; // 分配的厨师名称
  estimatedTime?: number; // 预计完成时间（分钟）
  priority?: number; // 优先级 1-5，5为最高
  pointsEarned?: number; // 新增：订单完成后获得的积分
}

// 购物车项
export interface CartItem {
  dishId: string;
  dishName: string;
  price: number;
  quantity: number;
  totalPrice: number;
}

// 菜品分类
export interface Category {
  id: string;
  name: string;
  description?: string;
}

// 应用状态
export interface AppState {
  currentUser: User | null;
  dishes: Dish[];
  orders: Order[];
  cart: CartItem[];
  categories: Category[];
  feedbacks: Feedback[];
  ratings: DishRating[];
  loading: boolean;
  error: string | null;
}

// 操作类型
export type AppAction =
  | { type: 'SET_USER'; payload: User }
  | { type: 'LOGOUT' }
  | { type: 'SET_DISHES'; payload: Dish[] }
  | { type: 'ADD_DISH'; payload: Dish }
  | { type: 'UPDATE_DISH'; payload: Dish }
  | { type: 'DELETE_DISH'; payload: string }
  | { type: 'SET_ORDERS'; payload: Order[] }
  | { type: 'ADD_ORDER'; payload: Order }
  | { type: 'UPDATE_ORDER'; payload: Order }
  | { type: 'SET_CART'; payload: CartItem[] }
  | { type: 'ADD_TO_CART'; payload: CartItem }
  | { type: 'REMOVE_FROM_CART'; payload: string }
  | { type: 'UPDATE_CART_ITEM'; payload: { dishId: string; quantity: number } }
  | { type: 'CLEAR_CART' }
  | { type: 'SET_CATEGORIES'; payload: Category[] }
  | { type: 'SET_FEEDBACKS'; payload: Feedback[] }
  | { type: 'ADD_FEEDBACK'; payload: Feedback }
  | { type: 'UPDATE_FEEDBACK'; payload: Feedback }
  | { type: 'SET_RATINGS'; payload: DishRating[] }
  | { type: 'ADD_RATING'; payload: DishRating }
  | { type: 'UPDATE_RATING'; payload: DishRating }
  | { type: 'SET_LOADING'; payload: boolean }
  | { type: 'SET_ERROR'; payload: string | null }; 

// 积分交易类型
export type PointsTransactionType = 
  | 'order_completion' 
  | 'order_payment' 
  | 'admin_adjustment' 
  | 'registration_bonus'
  | 'referral_bonus'
  | 'activity_reward'
  | 'first_order_bonus'
  | 'rating_bonus'
  | 'sharing_bonus'
  | 'consecutive_order_bonus'
  | 'points_expired'; // 新增：积分过期类型

// 积分交易记录
export interface PointsTransaction {
  id: string;
  userId: string;
  points: number; // 积分数量（正数）
  type: PointsTransactionType;
  isDebit: boolean; // 是否为支出
  description: string;
  referenceId?: string; // 关联ID
  createdAt: Date;
  balanceAfter: number; // 交易后余额
  multiplier?: number; // 积分倍率，基于会员等级
  expirationDate?: Date; // 积分过期日期
} 

// 会员等级
export type MemberLevel = 1 | 2 | 3 | 4;

// 积分过期记录
export interface PointsExpiration {
  id: string;
  userId: string;
  points: number;
  expirationDate: Date;
  isExpired: boolean;
  transactionId?: string; // 关联的积分交易ID
} 